<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 1问
        // console.log(num); 报错 没有声明和赋值

        // 2问
        console.log(num); //undefined  坑1
        var num = 10;
        // 通过变量预解析(变量提升)把所有的变量声明提升到了当前的作用域最前面，但是不提升赋值操作
        // 相当于执行了以下代码:
        // var num;
        // console.log(num);
        // num = 10;

        // 3问
        // 关键字自定义函数
        fn(); //放在函数前面或后面都没问题

        function fn() {
            console.log(11); //11
        }
        // 通过函数预解析(函数提升)把所有的函数声明提升到当前作用域的最前面，不调用函数
        // 就相当于执行了以下代码：
        // function fn() {
        //     console.log(11);
        // }
        // fn();

        // 4问
        // 函数表达式声明函数
        fun(); //报错，显示fun不是一个函数  坑2 （放在函数前面报错，放在函数后面正常）
        var fun = function() {
                console.log(22);
            }
            // 这里的fun相当于一个变量，所以是变量提升，而不是函数提升
            // 通过变量预解析，相当于执行了以下代码：
            // var fun;
            // fun();
            // fun = function() {
            //     console.log(22);
            // }
    </script>
</head>

<body>

</body>

</html>